home *** CD-ROM | disk | FTP | other *** search
- ;-----------------------------------------------------------------------;
- ; Mint_it/Mac_it - Spectre/MiNT booter ;
- ; by Sean Gordon and Karl Anders Øygard ;
- ;-----------------------------------------------------------------------;
-
- ;spectre ; Unquote for spectre version
-
- esc EQU $1B
-
- movea.l sp,a5
- movea.l 4(a5),a5
- move.l $0C(a5),d0 ; Text size
- add.l $14(a5),d0 ; Data size
- addi.l #$0500,d0
- move.l d0,d1
- add.l a5,d1
- andi.l #$FFFFFFFE,d1
- movea.l d1,sp
-
- move.l d0,-(sp)
- move.l a5,-(sp)
- clr.w -(sp)
- move.w #$4A,-(sp)
- trap #1 ; Shrink memory
- lea 12(sp),sp
-
- pea title(pc)
- move.w #9,-(sp)
- trap #1 ; Write message
- addq.w #6,sp
-
- move.w #1,-(sp)
- move.w #14,-(sp)
- trap #14 ; Get ptr to kbd buffer record
- addq.w #4,sp
- movea.l d0,a1
- movea.l (a1),a0 ; Get ptr to kbd buffer
- adda.w 6(a1),a0 ; Add head index
- move.w 2(a0),d4 ; Read key
- beq nochar
- IFD spectre
- cmp.w #'s',d4 ; Is it the hotkey?
- ELSE
- cmp.w #'m',d4 ; Is it the hotkey?
- ENDC
- bne nochar
-
- clr.w -(sp)
- pea config(pc)
- move.w #$3D,-(sp)
- trap #1 ; Open file
- addq.l #8,sp
- tst.w d0
- bmi nocnf ; Error?
- move.w d0,handle
-
- pea buffer(pc)
- pea 255.w
- move.w handle(pc),-(sp)
- move.w #$3F,-(sp)
- trap #1 ; Read 255 bytes from file
- lea 12(sp),sp
-
- move.w handle(pc),-(sp)
- move.w #$3E,-(sp)
- trap #1 ; Close file
- addq.w #4,sp
-
- lea buffer(pc),a0
- lea path(pc),a1
- ploop cmpi.b #$0D,(a0)
- beq.s mv_name
- move.b (a0)+,(a1)+
- bra.s ploop
-
- mv_name clr.b (a1)
- addq.w #2,a0
- lea name(pc),a1
- nloop tst.b (a0)
- beq.s no_more
- cmpi.b #$0D,(a0)
- beq.s no_more
- move.b (a0)+,(a1)+
- bra.s nloop
-
- no_more clr.b (a1)
-
- move.w #4,-(sp)
- trap #14 ; Get resolution
- addq.w #2,sp
- tst.w d0
- bne.s notlow ; Is it low res?
-
- move.w #1,-(sp)
- pea -1.w
- pea -1.w
- move.w #5,-(sp)
- trap #14 ; Set medium resolution
- lea 12(sp),sp
-
- notlow pea bootmsg(pc)
- move.w #9,-(sp)
- trap #1 ; Write 'bootmsg'-message
- addq.w #6,sp
-
- lea path(pc),a3
- addq.w #1,a3
- nocol move.b (a3)+,d0
- beq.s nodrv
- cmp.b #':',d0
- bne.s nocol
- move.b -2(a3),d0
- and.w #$00df,d0
- sub.w #'A',d0
- move.w d0,-(sp)
- move.w #14,-(sp)
- trap #1 ; Set default drive
- addq.w #4,sp
-
- pea (a3)
- move.w #$3B,-(sp)
- trap #1 ; Change directory
- addq.w #6,sp
- bra.s okaydir
-
- nodrv pea path(pc)
- move.w #$3B,-(sp)
- trap #1 ; Change directory
- addq.w #6,sp
-
- okaydir pea palette(pc)
- move.w #6,-(sp)
- trap #14 ; Set reasonable palette
- addq.w #6,sp
-
- pea env(pc)
- pea com(pc)
- pea name(pc)
- clr.w -(sp)
- move.w #$4B,-(sp)
- trap #1 ; Execute program
- lea 16(sp),sp
-
- pea nofile1(pc)
- move.w #9,-(sp)
- trap #1 ; 'Can't find...'
- addq.w #6,sp
-
- pea path(pc)
- move.w #9,-(sp)
- trap #1 ; Write pathname
- addq.w #6,sp
-
- pea name(pc)
- move.w #9,-(sp)
- trap #1 ; Write filename
- addq.w #6,sp
-
- pea nofile2(pc)
- move.w #9,-(sp)
- trap #1 ; '- abort'
- addq.w #6,sp
-
- wait pea presany(pc)
- move.w #9,-(sp)
- trap #1 ; 'Press any key...'
- addq.w #6,sp
-
- move.w #7,-(sp)
- trap #1 ; Wait for a key
- addq.w #2,sp
-
- nochar pea $4C0000
- trap #1 ; pterm
-
- ;---------------------------------------------- Couldn't find .cnf file --
- nocnf pea nofile1(pc)
- move.w #9,-(sp)
- trap #1 ; 'Can't find...'
- addq.w #6,sp
-
- pea config(pc)
- move.w #9,-(sp)
- trap #1 ; config file
- addq.w #6,sp
-
- pea nofile2(pc)
- move.w #9,-(sp)
- trap #1 ; '- abort'
- addq.w #6,sp
-
- bra.s wait
-
- IFD spectre
- config DC.B '\mac_it.cnf',0
- title DC.B esc,'p MAC_IT v1.1, 1992 ',esc,'q by WOF Inc and KAØ',$D,$A,$D,$A,0
- bootmsg DC.B esc,'p<<< Executing Spectre >>>',esc,'q',0
- ELSE
- config DC.B '\mint_it.cnf',0
- title DC.B esc,'p MiNT_IT v1.1, 1992 ',esc,'q by WOF Inc and KAØ',$D,$A,$D,$A,0
- bootmsg DC.B esc,'p<<< Executing MiNT >>>',esc,'q',0
- ENDC
-
- nofile1 DC.B esc,'pCan''t find ',0
- nofile2 DC.B ' - aborting load.',esc,'q',$0D,$0A,0
- presany DC.B 'Any key to continue.',$0D,$0A,$0D,$0A,0
- palette DC.W $777
- DS.W 15
-
- path DS.W 64
- name DS.W 7
-
- SECTION BSS
-
- env DS.B 1
- com DS.B 1
- handle DS.W 1
- buffer DS.W 128
-